import json
# 加载JSON文件数据集
# 加载舌象健康建议数据（从tongue_health_advice.json）
with open(r'H:\Project\Tongue\Response_health_advice\tongue_health_advice.json', 'r', encoding='utf-8') as file:
    advice_data = json.load(file)['tongue_advice']  # 提取舌象类建议数据

# 定义舌象特征分析函数
def analyze_tongue_features(tongue_color, tongue_coating_color, tongue_coating_texture):
    '''
    分析舌象特征并返回体质状况和舌苔状况
    参数:
        tongue_color (str): 舌质颜色（如'淡红舌'、'红舌'等）
        tongue_coating_color (str): 舌苔颜色（如'白苔'、'黄苔'、'灰黑苔'等）
        tongue_coating_texture (str): 舌苔质地（如'厚苔'、'薄苔'、'腻苔'、'非腻苔'等）
    返回:
        tuple: (body_condition, coating_condition) 体质状况和舌苔状况
    '''
    # 组合舌象类型字符串（格式如：淡红舌灰黑苔厚苔腻苔）
    tongue_type_str = f"{tongue_color}{tongue_coating_color}{tongue_coating_texture}"
    
    # 在JSON数据中查找匹配的舌象类型
    matched_type = next((item for item in advice_data if item['type'] == tongue_type_str), None)
    
    if matched_type:
        return matched_type['body'], f"{matched_type['body']}（源自JSON数据）"
    else:
        return "未识别的舌象类型", "未识别的舌象类型"


# 定义调理方案推荐函数
def recommend_treatment(body_condition, coating_condition, tongue_color, tongue_coating_color, tongue_coating_texture):
    '''
    根据舌象特征推荐调理方案
    参数:
        body_condition (str): 体质状况
        coating_condition (str): 舌苔状况
        tongue_color (str): 舌质颜色
        tongue_coating_color (str): 舌苔颜色
        tongue_coating_texture (str): 舌苔质地
    返回:
        dict: 包含中药调理、食疗推荐和生活习惯的调理方案
    '''
    treatment_plan = {}
    
    # 组合舌象类型字符串用于JSON查找
    tongue_type_str = f"{tongue_color}{tongue_coating_color}{tongue_coating_texture}"
    matched_type = next((item for item in advice_data if item['type'] == tongue_type_str), None)
    # matched_type = None
    # for data in advice_data:
    #     if data['type'] == tongue_type_str:
    #         matched_type = data
    if matched_type:
        # 从JSON数据提取建议
        treatment_plan['体质状况'] = matched_type['body']
        
        # 生活习惯建议
        treatment_plan['生活习惯建议'] = [item[0] for item in matched_type['lifestyle_advice']]
        
        # 中药调理建议
        treatment_plan['中药调理'] = [item[0] for item in matched_type['herbal_advice']]
        
        # 食疗推荐
        treatment_plan['食疗推荐'] = [item[0] for item in matched_type['diet_advice']]
    else:
        return {"error": "未找到匹配的舌象调理方案"}
    
    return treatment_plan


# 生成养生报告函数
def generate_health_report(tongue_color, tongue_coating_color, tongue_coating_texture):
    '''
    生成完整的养生报告
    参数:
        tongue_color (str): 舌质颜色
        tongue_coating_color (str): 舌苔颜色
        tongue_coating_texture (str): 舌苔质地
    返回:
        dict: 包含舌象分析和调理方案的养生报告
    '''
    body_condition, coating_condition = analyze_tongue_features(tongue_color, tongue_coating_color, tongue_coating_texture)
    treatment_plan = recommend_treatment(body_condition, coating_condition, tongue_color, tongue_coating_color, tongue_coating_texture)

    report = {
        '舌象分析': {
            '舌质颜色': tongue_color,
            '舌苔颜色': tongue_coating_color,
            '舌苔质地': tongue_coating_texture,
            '体质状况': body_condition,
            '舌苔状况': coating_condition
        },
        '调理方案': treatment_plan
    }
    return report


# 示例：生成淡红舌、灰黑苔、厚苔、腻苔的养生报告
if __name__ == "__main__":
    tongue_color = '淡红舌'
    tongue_coating_color = '灰黑苔'
    tongue_coating_textures = '厚苔腻苔'  # 处理多种舌苔质地的情况

    report = generate_health_report(tongue_color, tongue_coating_color, tongue_coating_textures)
    # print(f"\n**养生报告：{tongue_color}，{tongue_coating_color}，{tongue_coating_texture}**\n")
    print(json.dumps(report, ensure_ascii=False, indent=2))